Leitura das imagens de entrada

Abaixo é realizada apenas a leitura das imagens de entrada e da imagem de referência.

Funções para busca de correspondência

As funções abaixo definem os três métodos de detecção e descrição dos pontos de interesse para busca de homografia.

Todos as funções recebem como entrada duas imagens e retornam duas listas de pontos de correspondência (uma para cada imagem), sendo que em cada lista, o mesmo indice corresponde ao mesmo ponto em cada imagem.

Cálculo da homografia

De acordo com o método de busca de correspondência selecionado, encontro os pontos de correspondência e entrego para a função de busca por homografia (que internamente utiliza o RANSAC para encontrar os melhores parâmetros).

A função retorna a matriz de homografia

Funções de mescla de imagens

As funções abaixo são responsáveis por mesclar duas imagens. 3 estratégias foram implementadas.

Função para mescla de duas imagens

Abaixo temos as funções de mesclam duas imagens de acordo com as configurações selecionadas.

get_new_image_params

A função 'get_new_image_params' é responsavel por descobrir os parâmetros da imagem final após receber a imagem transformada pela homografia. Como a imagem irá crescer, eventualmente, para unir as duas imagens, ambas terão que ser deslocadas (translação), assim essa função também retorna uma matrix de translação que posteriormente poderá ser usado para posicionar cada imagem corretamente na imagem final

merge_images

A função 'merge_images' executa todos os passos para a junção das duas imagens.

  1. Calcula a homografia de acordo com o método selecionado,
  2. Calcula a dimensão da imagem final (e o deslocamento necessário para posicinar cada imagem na imagem final,
  3. Executa as transformações nas imagens, sendo que uma recebe a transformação da homografia + translação e a outra recebe apenas a translação,
  4. Executa a mistura das duas imagens de acordo com o método selecionado.

Função para geração da imagem panoramica

A função abaixo é responsável por fazer a junção das imagens.

Ela começa juntando cada extremidade em separado (do extremo para o centro). No último passo junta os dois lados na imagem final.

Função para comparar imagens

A função 'compare_images' tem como objetivo comparar imagens após o a mescla. Como elas não necessáriamente estarão alinhadas, tambem para ela é necessário calcular a homografia de forma que eu possa encaixar o melhor possível uma sobre a outra e com isso calcular as diferenças.

Para calcular a diferença de cada pixel, primeiro eu calculo o erro quadrático para cada um dos canais de cor. Com isso terei, para cada pixel, um vetor cujo tamanho é proporcional a diferença entre as duas imagens naquele pixel.

Para calcular a diferença no pixel eu verifico a norma deste vetor.

Como foi solicitado que na imagem de comparação o pixel receba um valor alto quando são muito similares, inverto a direção do valor.

Experimentos

Abaixo alguns experimentos demonstrando algumas caracteristicas dos algoritmos

Funções de Blending

Resultado

Abaixo podemos ver o resultado de cada um dos métodos observando o efeito sobre uma luminária que fica bem na junção entre as duas imagens.

Função de comparação

Abaixo o resultado da comparação de duas imagens mescladas por métodos de busca por correspondência diferentes.

Áreas brancas representam pixels que possuem alta similaridade.

Geração das panorâmicas

Atenção: os comandos abaixo são demorados

O objetivo deles é calcular as ponorâmicas utilizando diferentes métodos de busca de correspondência a mistura de imagens para, posteriormente, gerar um gráfico comparando.

Conclusão final

Conforme pode ser visto no gráfico acima, o SIFT na média apresentou o melhor resultado.

A mistura de imagens utilizando o feathering apresentou os menores erros.